package demo2;

import javax.swing.tree.TreeNode;

/**
 * Created with IntelliJ IDEA.
 * Description:判断是不是我们的一颗子树
 * User: liangyuanzhang
 * Date: 2025-4-22
 * Time: 0:23
 */

class Test {

    public boolean isSubtree(TreeNode root, TreeNode subRoot) {
        if(root == null)
            return false;
        if(isSameTree(root,subRoot))
            return true;
        if(isSubtree(root.left,subRoot))//这里要继续递归，以免出现一刀切的情况
            return true;
        if(isSubtree(root.right,subRoot))//这里要继续递归，以免出现一刀切的情况
            return true;
        return false;
    }

    public boolean isSameTree(TreeNode p, TreeNode q) {
        //1.先判断结构是否一样
        if(p != null && q == null || p == null && q != null)
            return false;
        //上述if语句未执行，意味着两个引用  同时为空 或者同时不为空
        if(p == null && q == null)//这里是先判断为空
            return true;
        //这里是不为空之后，在判断值一不一样
        if(p.val != q.val)
            return false;
        //到这里之后就是都不为空，且值i一样
        return isSameTree(p.left,q.left) && isSameTree(p.right,q.right);
    }

}
